﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EntitiesLayer
{
    public class Ejercicio : IEntity
    {
        #region Atributos

        private int _id;
        private String _nombreComun;
        private String _nombreOpcional;
        private String _codigo;
        private String _posicionInicial;
        private String _posicionFinal;
        private String _musculoPrincipal;
        private List<Musculo> _listaMusculos;
        private String _erroresComunes;
        private String _indicacionesGenerales;


        #endregion Atributos

        #region propiedades

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public String NombreComun
        {
            get { return _nombreComun; }
            set { _nombreComun = value; }
        }

        public String NombreOpcional
        {
            get { return _nombreOpcional; }
            set { _nombreOpcional = value; }
        }

        public String Codigo
        {
            get { return _codigo; }
            set { _codigo = value; }
        }

        public String PosicionInicial
        {
            get { return _posicionInicial; }
            set { _posicionInicial = value; }
        }

        public String PosicionFinal
        {
            get { return _posicionFinal; }
            set { _posicionFinal = value; }
        }

        public String MusculoPrincipal
        {
            get { return _musculoPrincipal; }
            set { _musculoPrincipal = value; }
        }

        public List<Musculo> ListaMusculos
        {
            get { return _listaMusculos; }
            set { _listaMusculos = value; }
        }

        public String ErroresComunes
        {
            get { return _erroresComunes; }
            set { _erroresComunes = value; }
        }

        public String IndicacionesGenerales
        {
            get { return _indicacionesGenerales; }
            set { _indicacionesGenerales = value; }
        }

        #endregion propiedades

        #region constructores

        //Constructor que recibe todos los parametros excepto id 
        public Ejercicio(String pnombreComun, String pnombreOpcional, String pcodigo, String pposicionInicial, String pposicionFinal, String pMusculoPrincipal, List<Musculo> plistaMusculos, String perroresComunes, String pindicacionesGenerales)
        {
            Id = 0;
            NombreComun = pnombreComun;
            NombreOpcional = pnombreOpcional;
            Codigo = pcodigo;
            ErroresComunes = perroresComunes;
            IndicacionesGenerales = pindicacionesGenerales;
            PosicionInicial = pposicionInicial;
            PosicionFinal = pposicionFinal;
            MusculoPrincipal = pMusculoPrincipal;
            ListaMusculos = plistaMusculos;
        }

        //Constructor que recibe todos los parametros
        public Ejercicio(int pid, String pnombreComun, String pnombreOpcional, String pcodigo, String pposicionInicial, String pposicionFinal, String pMusculoPrincipal, List<Musculo> plistaMusculos, String perroresComunes, String pindicacionesGenerales)
        {
            Id = pid;
            NombreComun = pnombreComun;
            NombreOpcional = pnombreOpcional;
            Codigo = pcodigo;
            ErroresComunes = perroresComunes;
            IndicacionesGenerales = pindicacionesGenerales;
            PosicionInicial = pposicionInicial;
            PosicionFinal = pposicionFinal;
            MusculoPrincipal = pMusculoPrincipal;
            ListaMusculos = plistaMusculos;

        }
        //Constructor que recibe todos los parametros excepto imagen de posicion inicial y final


        public Ejercicio()
        {
            Id = 0;
        }

        #endregion constructores

        #region Reglas de objeto

        public bool IsValid
        {
            get { return (GetRuleViolations().Count() == 0); }
        }

        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (String.IsNullOrEmpty(NombreComun))
            {
                yield return new RuleViolation("Nombre Requerido", "Nombre");
            }

            if (String.IsNullOrEmpty(Codigo))
            {
                yield return new RuleViolation("Codigo Requerido", "Codigo");
            }

            if (String.IsNullOrEmpty(PosicionInicial))
            {
                yield return new RuleViolation("Imagen inicial Requerida", "Imagen inicial");
            }

            if (String.IsNullOrEmpty(PosicionFinal))
            {
                yield return new RuleViolation("Imagen final Requerida", "Imagen final");
            }


            if (String.IsNullOrEmpty(IndicacionesGenerales))
            {
                yield return new RuleViolation("Indicacion general Requerida", "Indicacion general");
            }

            if (String.IsNullOrEmpty(ErroresComunes))
            {
                yield return new RuleViolation("Errores comunes Requeridos", "Errores comunes");
            }

            if (String.IsNullOrEmpty(MusculoPrincipal))
            {
                yield return new RuleViolation("Musculo principal requerido", "Musculo principal");
            }
            yield break;
        }
        #endregion


    }
}
